#ifndef BANKSYSTEM_HH
#define BANKSYSTEM_HH
#include "Account.hh"
#include "SavingsAccount.hh"
#include "CheckingAccount.hh"
#include <map>
#include <memory>

class BankSystem {
private:
    std::map<std::string, std::pair<std::shared_ptr<SavingsAccount>, std::shared_ptr<CheckingAccount>>> customers;
    std::map<std::string, std::shared_ptr<IAccount>> accountsById;

public:
    bool registerCustomer(const std::string& name);
    bool accountExists(const std::string& accountId) const;
    std::shared_ptr<IAccount> getAccount(const std::string& accountId);
    std::pair<std::shared_ptr<SavingsAccount>, std::shared_ptr<CheckingAccount>> 
    getCustomerAccounts(const std::string& name);
    void generateTransactionReport(const std::string& filename) const;
    void generateCustomerReport(const std::string& customerName, const std::string& filename) const;
    void generateAccountReport(const std::string& accountId, const std::string& filename) const;
    std::vector<std::pair<std::string, std::pair<std::shared_ptr<SavingsAccount>, 
                                                std::shared_ptr<CheckingAccount>>>> 
    getAllAccounts() const;
};


#endif